package generics;//: generics/GenericArray.java

public class GenericArray<T> {
    private T[] array;
    @SuppressWarnings("unchecked")
    public GenericArray(int sz) {
    array = (T[])new Object[sz];
    }
    public void put(int index, T item) {
    array[index] = item;
    }
    public T get(int index) { return array[index]; }
    // Method that exposes the underlying representation:
    public T[] rep() { return array; }
    public static void main(String[] args) {
        GenericArray<Integer> gai =
          new GenericArray<Integer>(10);
        // This causes a ClassCastException:
        //! Integer[] ia = gai.rep();
        // This is OK:
        Object[] oa = gai.rep();

        Object a = 1;
        Integer b = (Integer) a;

        Object[] aa = {1, 2, 3};
        Integer[] bb = (Integer[]) aa;
    }
} ///:~
